package com.example.project7.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Environment;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class AvatarManager {
    private static final String AVATAR_DIR = "avatars";
    
    /**
     * 获取头像存储目录
     * @param context 上下文
     * @return 头像存储目录文件对象
     */
    public static File getAvatarDirectory(Context context) {
        File avatarDir = new File(context.getFilesDir(), AVATAR_DIR);
        if (!avatarDir.exists()) {
            avatarDir.mkdirs();
        }
        return avatarDir;
    }
    
    /**
     * 根据用户ID获取头像文件路径
     * @param context 上下文
     * @param userId 用户ID
     * @return 头像文件路径
     */
    public static String getAvatarFilePath(Context context, String userId) {
        File avatarDir = getAvatarDirectory(context);
        return new File(avatarDir, userId + "_avatar.png").getAbsolutePath();
    }
    
    /**
     * 保存头像到本地
     * @param context 上下文
     * @param bitmap 头像Bitmap
     * @param userId 用户ID
     * @return 是否保存成功
     */
    public static boolean saveAvatar(Context context, Bitmap bitmap, String userId) {
        // 删除旧头像
        deleteAvatar(context, userId);
        
        // 保存新头像
        String avatarPath = getAvatarFilePath(context, userId);
        File avatarFile = new File(avatarPath);
        
        try {
            FileOutputStream fos = new FileOutputStream(avatarFile);
            // 压缩图片并保存
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.flush();
            fos.close();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
    
    /**
     * 加载用户头像
     * @param context 上下文
     * @param userId 用户ID
     * @return 头像Bitmap，如果不存在则返回null
     */
    public static Bitmap loadAvatar(Context context, String userId) {
        String avatarPath = getAvatarFilePath(context, userId);
        File avatarFile = new File(avatarPath);
        
        if (avatarFile.exists()) {
            try {
                FileInputStream fis = new FileInputStream(avatarFile);
                Bitmap bitmap = BitmapFactory.decodeStream(fis);
                fis.close();
                return bitmap;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        return null;
    }
    
    /**
     * 删除用户头像
     * @param context 上下文
     * @param userId 用户ID
     * @return 是否删除成功
     */
    public static boolean deleteAvatar(Context context, String userId) {
        String avatarPath = getAvatarFilePath(context, userId);
        File avatarFile = new File(avatarPath);
        
        if (avatarFile.exists()) {
            return avatarFile.delete();
        }
        
        return true;
    }
    
    /**
     * 将Bitmap转换为圆形
     * @param bitmap 原始Bitmap
     * @return 圆形Bitmap
     */
    public static Bitmap getRoundedBitmap(Bitmap bitmap) {
        if (bitmap == null) {
            return null;
        }
        
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        int size = Math.min(width, height);
        
        Bitmap output = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);
        
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, size, size);
        final RectF rectF = new RectF(rect);
        
        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(0xff424242);
        canvas.drawOval(rectF, paint);
        
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(Bitmap.createScaledBitmap(bitmap, size, size, false), rect, rect, paint);
        
        return output;
    }
    
    /**
     * 压缩图片到指定尺寸
     * @param bitmap 原始图片
     * @param maxWidth 最大宽度
     * @param maxHeight 最大高度
     * @return 压缩后的图片
     */
    public static Bitmap compressBitmap(Bitmap bitmap, int maxWidth, int maxHeight) {
        if (bitmap == null) {
            return null;
        }
        
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        
        // 计算缩放比例
        float scaleWidth = ((float) maxWidth) / width;
        float scaleHeight = ((float) maxHeight) / height;
        float scale = Math.min(scaleWidth, scaleHeight);
        
        // 如果图片尺寸小于目标尺寸，直接返回原图
        if (scale >= 1.0f) {
            return bitmap;
        }
        
        // 按比例缩放
        int newWidth = (int) (width * scale);
        int newHeight = (int) (height * scale);
        
        return Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, true);
    }
}